struct Rectangle {
	public:
	virtual ~Rectangle() = default;
	virtual double area() { return width_ * height_; }
	// I think I dont need setter
	virtual void setWidth(double width) {width_ = width;}
	virtual void setHeigth(double height) {height_ = height;}

	private:
	double width_;
	double height_;
};

struct Square : public Rectangle {
	public:
	double area() override {
		return Rectangle::area();
	}

	void setWidth(double width) override {
		// see this, have to modify when father class change
		Rectangle::setWidth(width);
	}

	// so set height is like above, it is bad code, once modify, modify all?
};

int main() {}